package cn.itcast.nems.studentrecord.dto;

import cn.itcast.nems.common.constant.PaymentTypeEum;
import cn.itcast.nems.studentrecord.constant.ContractStateEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * <p>
 * 接口学籍详情
 * </p>
 *
 * @author zhouwei
 * @since 2024/3/12 2:45 PM
 **/
@Data
@NoArgsConstructor
public class StudentRecordInfoDTO implements Serializable {
    /**
     * 学生ID
     */
    private Integer studentId ;
    /**
     * 学籍ID
     */
    private String studentRecordId;
    /**
     * 是否升级
     */
    private Boolean renewalFlag;
    /**
     * 学籍来源，枚举值：新报名｜NEW、升班｜RENEWAL、转班｜EXCHANGE、转移｜TRANSFER、休学｜SUSPENSION、待定班｜DELAY、重读｜REPEAT
     */
    private String source ;
    /** 是否待定班级（不确定的班级）;与“是否休学班级”互斥。 */
    private Boolean delayFlag;
    /** 是否休学班级；与“是否待定班级”互斥 */
    private Boolean suspensionFlag;
    /**
     * 入班时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDateTime inDate ;
    /**
     * 出班时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDateTime settlementDate ;
    /**
     * 如果学员已出班，该字段非空，枚举值：DROPOUT | 退学、转班｜EXCHANGE、转移｜TRANSFER、休学｜SUSPENSION、待定班｜DELAY、结课｜FINAL',
     */
    private String settlementReason ;
    /**
     * 付款方式
     */
    private PaymentTypeEum paymentType ;
    /**
     * 合同状态
     */
    private ContractStateEnum contractState ;
    /**
     * 排座时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime seatOrderTime ;
    /**
     * 班级执行价格;单位：分
     */
    private Integer price ;
    /**
     * 优惠金额;单位：分
     */
    private Integer discountAmount ;
    /**
     * 已付金额
     */
    private Integer paidAmount ;
    /**
     * 退费金额;只包含退费单上金额合计;单位：分
     */
    private Integer refundAmount ;
    /**
     * 应付金额，单位：分
     */
    private Integer amountDue;
    /**
     * 实际应付金额，单位：分
     */
    private Integer actualAmountDue ;
    /**
     * 剩余应付金额，单位：分
     */
    private Integer balanceAmountDue ;
    /**
     * 学籍创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createdDatetime ;
    /**
     * 状态;枚举值：未生效｜PENDING、生效｜VALID、失效｜INVALID、结课｜FINISHED。注：非结课出班后学籍状态变为“失效”
     */
    private String state ;

}
